package com.linsir.template.common.util;

import com.linsir.common.utils.util.ExceptionUtil;
import com.linsir.common.utils.xx;
import com.linsir.config.EovaConfig;
import com.linsir.model.Button;
import com.linsir.model.MetaField;

/**
 * @author yuxiaolin
 * @title: TemplateUtil
 * @projectName linsir-mu
 * @description: TODO
 * @date 2021/12/2 2:53 PM
 */

public class TemplateUtil {

    /**
     * 值的类型转换
     *
     * @param item 元字段
     * @param value
     * @return
     */
    public static Object buildValue(MetaField item, Object value) {
        // 控件类型
        String type = item.getStr("type");
        // 数据类型
        // String dataType = item.getDataTypeName();
        // 布尔框需要特转换值
        if (type.equals(MetaField.TYPE_BOOL)) {
            if (xx.isTrue(value)) {
                return 1;
            } else {
                return 0;
            }
        }
        return value;
    }

    /**
     * 构建异常信息为HTML
     *
     * @param e
     * @return
     */
    public static String buildException(Exception e) {
        e.printStackTrace();

        String type = e.getClass().getName();
        type = type.equals("java.lang.Exception") ? e.getMessage() : type;
        return "<br/><p style=\"color:red\" title=\"" + ExceptionUtil.getStackTrace(e) + "\">" + type + " [查看异常]</p>";
    }

    /**
     * 初始化业务拦截器
     *
     * @param bizIntercept
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static <T> T initIntercept(String bizIntercept) throws Exception {
        if (!xx.isEmpty(bizIntercept)) {
            try {
                // 实例化自定义拦截器
                return (T) Class.forName(bizIntercept).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
                throw new Exception("实例化拦截器异常，请检查类是否存在:" + bizIntercept);
            }
        }
        return null;
    }

    /**
     * 初始化元对象拦截器
     *
     * @param bizIntercept
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static <T> T initMetaObjectIntercept(String bizIntercept) throws Exception {
        Object o = initIntercept(bizIntercept);
        if (o == null) {
            // 命中默认拦截器(如果有)
            return (T) EovaConfig.getDefaultMetaObjectIntercept();
        }
        return (T)o;
    }

    /**
     * 默认查询按钮
     * @return
     */
    public static Button getQueryButton() {
        Button btn = new Button();
        btn.set("name", "查询");
        btn.set("ui", "query");
        return btn;
    }
}
